home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 283_01 / keys.asm < prev    next >
Assembly Source File  |  1988-12-15  |  1KB  |  58 lines

  1. ;
  2. ;  ROM-BIOS keyboard services for small-model C programs
  3. ;
  4. ;  C functions provided:
  5. ;      extern unsigned read_keyboard( void (*wait_fn)( void ) );
  6. ;
  7. ;  4/21/88, d.c.oshel
  8. ;
  9.     TITLE   keys.asm
  10.     NAME    keys
  11.  
  12.     .8087
  13. _TEXT    SEGMENT  WORD PUBLIC 'CODE'
  14. _TEXT    ENDS
  15. _DATA    SEGMENT  WORD PUBLIC 'DATA'
  16. _DATA    ENDS
  17. CONST    SEGMENT  WORD PUBLIC 'CONST'
  18. CONST    ENDS
  19. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  20. _BSS    ENDS
  21. DGROUP    GROUP    CONST, _BSS, _DATA
  22.     ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP
  23.  
  24. _TEXT      SEGMENT
  25.     ASSUME    CS: _TEXT
  26. ;
  27. ;=========================================================
  28. ; unsigned near read_keyboard( void (* near fn)( void ) )
  29. ;=========================================================
  30. ;
  31.     PUBLIC    _read_keyboard
  32.  
  33. _read_keyboard    PROC NEAR
  34.     push    bp            ;old value, wotever it is
  35.     mov    bp,sp            ;get current stack frame
  36.     jmp    short testit
  37. waitfn:
  38.     call    WORD PTR [bp+4]        ;near function address on stack
  39. testit:
  40.     mov     ah,1            ;key ready?
  41.     int    22                 ;ROM-BIOS kbhit service
  42.     jnz    waitfn            ;no, wait for it
  43. ;
  44.     mov    ah,0            ;yes, get it
  45.     int    22            ;ROM-BIOS rdkey service
  46.     cmp    al,0            ;aux byte present in ax?
  47.     jz    done            ;yes, extended ascii, ax is fine
  48.     sub    ah,ah            ;normal, don't cbw, sign-extends ax
  49. done:
  50.     pop    bp            ;restore old value
  51.     ret    
  52.  
  53. _read_keyboard    ENDP
  54.  
  55.  
  56. _TEXT    ENDS
  57. END
  58.